#ifndef MONSTERGUTS_H
#define MONSTERGUTS_H

#include "slotguts.h"

class MonsterSlotGuts : public SlotGuts
{
	protected:
		int32 totalBet;
		int32 numGoodPicks;
		int64 currentGameNum;
		bool8 haveBonusGame;
		bool8 readytofinish;

		enum
		{
			GUTSIDMIN =		17000,
			GUTSIDMAX =		17100,
			MAXAGGREGATE =	56250,
/*
			FEET_START = 99,
			HAND_START = 96,
			SKULL_START = 94,
			LIVER_START = 92,
			INTESTINES_START = 90,
			EYEBALLS_START = 86,
			LUNGS_START = 84,
			HEART_START = 82,
			BRAIN_START = 80,
*/
			FEET_START = 20,
			HAND_START = 19,
			SKULL_START = 17,
			LIVER_START = 15,
			INTESTINES_START = 13,
			EYEBALLS_START = 11,
			LUNGS_START = 9,
			HEART_START = 7,
			BRAIN_START = 5,
		};

        enum SUBGAMEDEFS
        {

//            SGLOSERPICKED = -10,
			SGNOTPICKED = -1,
			BGNONE = 0,
			BGGRAVEBONUS = 1,
			BGBUILDERBONUS = 2,
			BGBOTH = 3,
        };

        enum SUBGAMEIDX
        {
			SGIDX_BONUSGAME,
			SGIDX_FEET,
			SGIDX_HAND,
			SGIDX_SKULL,
			SGIDX_LIVER,
			SGIDX_INTESTINES,
			SGIDX_EYEBALLS,
			SGIDX_LUNGS,
			SGIDX_HEART,
			SGIDX_BRAIN,
//			SGIDX_BONUSGAME,

			SGIDX_REEL1,	//0x0a  10
			SGIDX_LINE1,
			SGIDX_REEL2,
			SGIDX_LINE2,
			SGIDX_REEL3,
			SGIDX_LINE3,
			SGIDX_PAYOUT1,
			SGIDX_PAYOUT2,
			SGIDX_PAYOUT3,
			SGIDX_SELECTION,
			SGIDX_PAYOUT,

			SGIDX_TRAY1,	//0x15  21
			SGIDX_TRAY2,
			SGIDX_TRAY3,
			SGIDX_TRAY4,
			SGIDX_TRAY5,
			SGIDX_TRAY6,
			SGIDX_TRAYBONUSAMOUNT,
			SGIDX_TRAYSELECTIONDONE,
			SGIDX_TUBE1MONSTER,
			SGIDX_TUBE1BONUS,
			SGIDX_TUBE2MONSTER,
			SGIDX_TUBE2BONUS,
			SGIDX_TUBE3MONSTER,
			SGIDX_TUBE3BONUS,
			SGIDX_ROUNDNUMBER,
			SGIDX_PLAYERSELECTION,
			SGIDX_PLAYERPAYOUT,
			SGIDX_TOTALPAYOUT,
			SGIDX_SUBGAMEOVER,	//0x27  39

            SG_SZ,
        };

	public:
        virtual int32 getMaxAggregate();
		virtual void playBonusGame(uint8 bonusGameType, int32 bonusDataCount, int32 *bonusData);
		virtual bool8 playGraveBonus(uint8 bonusGameType, int32 bonusDataCount, int32 *bonusData);
		virtual bool8 playMonsterBuilder(uint8 bonusGameType, int32 bonusDataCount, int32 *bonusData);
	    virtual void classifyScatters(SlotSpin *spin);
		virtual bool8 saveGame();
		virtual bool8 isGameComplete();
        virtual bool8 hasSavedGames(){return true;};
		virtual void loadSubGameData();

	protected:
        virtual bool8 isValidGuts();
		uint8 classifyStops(uint8 *, uint8, uint8);
        virtual void preSpinClassifyResults(SlotSpin *spin);
        virtual SlotSpin *makeJackpot();
		void initializeGraveBonus();
		void initializeMonsterBuilder();
};

#endif


